// 创建枚举对象，用于界面显示转换
function createEnumObject(enums) {
  let labels = null
  let values = null
  let labelAndValues = []

  return {
    getLabels() {
      if (!labels) {
        labels = enums.map((item) => item.label)
      }
      return labels
    },
    getValues() {
      if (!values) {
        values = enums.map((item) => item.value)
      }
      return values
    },

    getLabelAndValues() {
      labelAndValues = []
      enums.forEach(item => {
        labelAndValues.push({
          label: item.label,
          value: item.value
        })
      })
      return labelAndValues
    },

    getLabel(value) {
      let index = this.getValues().indexOf(value)

      if (index > -1) {
        return this.getLabels()[index]
      }
    },

    getValue(label) {
      let index = this.getLabels().indexOf(label)

      if (index > -1) {
        return this.getValues()[index]
      }
    },

    getItem(valueOrLabel) {
      let index = this.getValues().indexOf(valueOrLabel)

      if (index < 0) {
        index = this.getLabels().indexOf(valueOrLabel)
      }

      if (index > -1) {
        return enums[index]
      }
    },
  }
}


/** 性别 */
export const genderEnum = {
  // 男性
  MALE: 1,
  // 女性
  FEMALE: 2,
  // 未知
  UNKNOWN: 3,
}

// 枚举值配置，用于属性扩展
const genderEnumConfig = [
  {
    value: genderEnum.MALE,
    label: '男',
    color: 'blue',
    icon: 'male',
  },
  {
    value: genderEnum.FEMALE,
    label: '女',
    color: 'pink',
    icon: 'female',
  },
  {
    value: genderEnum.UNKNOWN,
    label: '未知',
    color: 'gray',
    icon: 'question',
  },
]

// 枚举值对象，用于数值转换
export const genderEnumObj = createEnumObject(genderEnumConfig)
